home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmiSoft / Dev / misc / WHDLoad_dev.lha / WHDLoad / Src / slave-examples / elvira2.asm < prev    next >
Encoding:
Assembly Source File  |  2002-12-12  |  5.8 KB  |  303 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    elvira2.asm
  3. ;  :Contents.    Slave for "Elvira 2" from Accolade
  4. ;  :Author.    Wepl
  5. ;  :Original    v1 
  6. ;  :Version.    $Id: elvira2.asm 1.8 2002/12/11 23:40:48 wepl Exp wepl $
  7. ;  :History.    24.01.02 started
  8. ;        09.05.02 copyprotection removed
  9. ;        11.12.02 spanish version added
  10. ;  :Requires.    -
  11. ;  :Copyright.    Public Domain
  12. ;  :Language.    68000 Assembler
  13. ;  :Translator.    Devpac 3.14, Barfly 2.9
  14. ;  :To Do.
  15. ;---------------------------------------------------------------------------*
  16.  
  17.     INCDIR    Includes:
  18.     INCLUDE    whdload.i
  19.     INCLUDE    whdmacros.i
  20.     INCLUDE    lvo/dos.i
  21.  
  22.     IFD BARFLY
  23.     OUTPUT    "wart:e/elvira2/Elvira2.Slave"
  24.     BOPT    O+                ;enable optimizing
  25.     BOPT    OG+                ;enable optimizing
  26.     BOPT    ODd-                ;disable mul optimizing
  27.     BOPT    ODe-                ;disable mul optimizing
  28.     BOPT    w4-                ;disable 64k warnings
  29.     SUPER
  30.     ENDC
  31.  
  32. ;============================================================================
  33.  
  34. CHIPMEMSIZE    = $80000
  35. FASTMEMSIZE    = $80000
  36. NUMDRIVES    = 1
  37. WPDRIVES    = %0000
  38.  
  39. BLACKSCREEN
  40. ;DEBUG
  41. ;DISKSONBOOT
  42. HDINIT
  43. ;HRTMON
  44. IOCACHE        = 28000
  45. ;MEMFREE    = $200
  46. ;NEEDFPU
  47. ;SETPATCH
  48.  
  49. ;============================================================================
  50.  
  51. KICKSIZE    = $40000            ;34.005
  52. BASEMEM        = CHIPMEMSIZE
  53. EXPMEM        = KICKSIZE+FASTMEMSIZE
  54.  
  55. ;============================================================================
  56.  
  57. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  58.         dc.w    15            ;ws_Version
  59.         dc.w    WHDLF_NoError|WHDLF_EmulPriv|WHDLF_Examine    ;ws_flags
  60.         dc.l    BASEMEM            ;ws_BaseMemSize
  61.         dc.l    0            ;ws_ExecInstall
  62.         dc.w    _boot-_base        ;ws_GameLoader
  63.         dc.w    _data-_base        ;ws_CurrentDir
  64.         dc.w    0            ;ws_DontCache
  65. _keydebug    dc.b    0            ;ws_keydebug
  66. _keyexit    dc.b    $59            ;ws_keyexit = F10
  67. _expmem        dc.l    EXPMEM            ;ws_ExpMem
  68.         dc.w    _name-_base        ;ws_name
  69.         dc.w    _copy-_base        ;ws_copy
  70.         dc.w    _info-_base        ;ws_info
  71.  
  72. ;============================================================================
  73.  
  74.     IFD BARFLY
  75.     DOSCMD    "WDate  >T:date"
  76.     ENDC
  77.  
  78. _name        dc.b    "Elvira 2 - The Jaws of Cerberus",0
  79. _copy        dc.b    "1991 Accolade",0
  80. _info        dc.b    "adapted by Wepl",10
  81.         dc.b    "Version 1.2 "
  82.     IFD BARFLY
  83.         INCBIN    "T:date"
  84.     ENDC
  85.         dc.b    0
  86. _data        dc.b    "data",0
  87. _runit        dc.b    "runit",0
  88. _args        dc.b    "gameamiga",10
  89. _args_end
  90.         dc.b    0
  91.     EVEN
  92.  
  93. ;============================================================================
  94. _start    ;    A0 = resident loader
  95. ;============================================================================
  96.  
  97. _bootdos
  98.  
  99.     ;open doslib
  100.         lea    (_dosname,pc),a1
  101.         move.l    (4),a6
  102.         jsr    (_LVOOldOpenLibrary,a6)
  103.         move.l    d0,a6            ;A6 = dosbase
  104.         
  105.     ;load exe
  106.         lea    (_runit),a0
  107.         move.l    a0,d1
  108.         jsr    (_LVOLoadSeg,a6)
  109.         move.l    d0,d7            ;D7 = segment
  110.         beq    .end
  111.  
  112.     ;check version
  113.         lea    (_runit),a0
  114.         move.l    a0,d1
  115.         move.l    #MODE_OLDFILE,d2
  116.         jsr    (_LVOOpen,a6)
  117.         move.l    d0,d1
  118.         move.l    #300,d3
  119.         sub.l    d3,a7
  120.         move.l    a7,d2
  121.         jsr    (_LVORead,a6)
  122.         move.l    d3,d0
  123.         move.l    a7,a0
  124.         move.l    (_resload),a2
  125.         jsr    (resload_CRC16,a2)
  126.         add.l    d3,a7
  127.         
  128.         lea    (_plde),a0
  129.         cmp.w    #$62ca,d0
  130.         beq    .p
  131.         lea    (_plen),a0
  132.         cmp.w    #$93df,d0
  133.         beq    .p
  134.         lea    (_ples),a0
  135.         cmp.w    #$f3be,d0
  136.         beq    .p
  137.         lea    (_plfr),a0
  138.         cmp.w    #$929a,d0
  139.         beq    .p
  140.         pea    TDREASON_WRONGVER
  141.         jmp    (resload_Abort,a2)
  142.         
  143.     ;patch
  144. .p        move.l    d7,a1
  145.         jsr    (resload_PatchSeg,a2)
  146.  
  147.     IFD DEBUG
  148.     ;set debug
  149.         clr.l    -(a7)
  150.         move.l    d7,-(a7)
  151.         pea    WHDLTAG_DBGSEG_SET
  152.         move.l    a7,a0
  153.         jsr    (resload_Control,a2)
  154.         add.w    #12,a7
  155.     ENDC
  156.  
  157.     ;call
  158.         move.l    d7,a1
  159.         add.l    a1,a1
  160.         add.l    a1,a1
  161.         moveq    #_args_end-_args,d0
  162.         lea    (_args,pc),a0
  163.         move.l    (4,a7),d2        ;D2 = stacksize
  164.         sub.l    #5*4,d2            ;required for MANX stack check
  165.         movem.l    d2/d7/a2/a6,-(a7)
  166.         jsr    (4,a1)
  167.         movem.l    (a7)+,d2/d7/a2/a6
  168.  
  169.         pea    TDREASON_OK
  170.         jmp    (resload_Abort,a2)
  171.  
  172.     ifeq 1
  173.     ;remove exe
  174.         move.l    d7,d1
  175.         jsr    (_LVOUnLoadSeg,a6)
  176.     endc
  177.  
  178. .end        moveq    #0,d0
  179.         rts
  180.  
  181. _plde    PL_START
  182.     PL_S    $23a6,$bc-$a6    ;disable DeleteFile
  183.     PL_PS    $1906e,_dbffix
  184.     PL_W    $1906e+6,$1f4
  185.     PL_PS    $19120,_dbffix
  186.     PL_W    $19120+6,$5000
  187.     PL_PS    $1c58a,_dbffix
  188.     PL_W    $1c58a+6,$50
  189.     PL_PS    $1c5a0,_dbffix
  190.     PL_W    $1c5a0+6,$30
  191.     PL_END
  192.  
  193. _plen    PL_START
  194.     PL_S    $23a6,$bc-$a6    ;disable DeleteFile
  195.     PL_PS    $19052,_dbffix
  196.     PL_W    $19052+6,$1f4
  197.     PL_PS    $19104,_dbffix
  198.     PL_W    $19104+6,$5000
  199.     PL_PS    $1c56e,_dbffix
  200.     PL_W    $1c56e+6,$30
  201.     PL_PS    $1c584,_dbffix
  202.     PL_W    $1c584+6,$50
  203.     PL_END
  204.  
  205. _ples    PL_START
  206.     PL_S    $23a6,$bc-$a6    ;disable DeleteFile
  207.     PL_PS    $1905c,_dbffix
  208.     PL_W    $1905c+6,$1f4
  209.     PL_PS    $1910e,_dbffix
  210.     PL_W    $1910e+6,$5000
  211.     PL_PS    $1c578,_dbffix
  212.     PL_W    $1c578+6,$30
  213.     PL_PS    $1c58e,_dbffix
  214.     PL_W    $1c58e+6,$50
  215.     PL_END
  216.  
  217. _plfr    PL_START
  218.     PL_S    $23a6,$bc-$a6    ;disable DeleteFile
  219.     PL_PS    $19062,_dbffix
  220.     PL_W    $19062+6,$1f4
  221.     PL_PS    $19114,_dbffix
  222.     PL_W    $19114+6,$5000
  223.     PL_PS    $1c57e,_dbffix
  224.     PL_W    $1c57e+6,$50
  225.     PL_PS    $1c594,_dbffix
  226.     PL_W    $1c594+6,$30
  227.     PL_END
  228.  
  229. _dbffix        movem.l    d0-d1/a0,-(a7)
  230.         move.l    (12,a7),a0
  231.         moveq    #0,d0
  232.         move.w    (a0)+,d0
  233.         divu    #34,d0
  234. .1        move.b    $dff006,d1
  235. .2        cmp.b    $dff006,d1
  236.         beq    .2
  237.         dbf    d0,.1
  238.         movem.l    (a7)+,d0-d1/a0
  239.         addq.l    #2,(a7)
  240.         rts
  241.  
  242. ;---------------
  243. ; IN:    D0 = ULONG bytes read
  244. ;    D1 = ULONG offset in file
  245. ;    A0 = CPTR name of file
  246. ;    A1 = APTR memory buffer
  247. ; OUT:    -
  248.  
  249. ; that removes the copyprotection...
  250.  
  251. _cb_dosRead
  252.         move.l    a0,a2
  253. .1        tst.b    (a2)+
  254.         bne    .1
  255.         lea    .name,a3
  256.         move.l    a3,a4
  257. .2        tst.b    (a4)+
  258.         bne    .2
  259.         sub.l    a4,a2
  260.         add.l    a3,a2        ;first char to check
  261. .4        move.b    (a2)+,d2
  262.         cmp.b    #"A",d2
  263.         blo    .3
  264.         cmp.b    #"Z",d2
  265.         bhi    .3
  266.         add.b    #$20,d2
  267. .3        cmp.b    (a3)+,d2
  268.         bne    .no
  269.         tst.b    d2
  270.         bne    .4
  271.  
  272.     ;check position
  273.         move.l    d0,d2
  274.         add.l    d1,d2
  275.         lea    .data,a2
  276.         moveq    #0,d3
  277. .next        movem.w    (a2)+,d3-d4
  278.         tst.w    d3
  279.         beq    .no
  280.         cmp.l    d1,d3
  281.         blo    .next
  282.         cmp.l    d2,d3
  283.         bhs    .next
  284.         sub.l    d1,d3
  285.         move.b    d4,(a1,d3.l)
  286.         bra    .next
  287.  
  288. .no        rts
  289.  
  290. .name        dc.b    "tables01",0    ;lower case!
  291.     EVEN
  292. .data        dc.w    $4278,$c    ;original = 0b
  293.         dc.w    $45b4,$c    ;original = 0b
  294.         dc.w    0
  295.  
  296. ;============================================================================
  297.  
  298.     INCLUDE    Sources:whdload/kick13.s
  299.  
  300. ;============================================================================
  301.  
  302.     END
  303.